<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:model="http://euss.evaluant.com/schemas/GenerationModel.xsd" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
	<xsl:template match="/UMLModel">
		<xsl:apply-templates/>
	</xsl:template>
	
	<xsl:template match="Model">
		<xsl:element name="model:Model">
			<xsl:apply-templates select="//Package"/>
		</xsl:element>
	</xsl:template>
	
	<xsl:template match="Package">
    <xsl:element name="model:Package">
			<xsl:copy-of select="@name"/>
			<xsl:apply-templates select="//Class"/>
			<xsl:apply-templates select="//Association"/>
			<xsl:apply-templates select="//Enumeration" mode="Enumeration"/>
			<xsl:apply-templates select="//Interface"/>
			
		</xsl:element>
	</xsl:template>
	
	
	<xsl:template match="Association">
		<xsl:element name="model:Relationship">
			<!--attention il existe, pour type, une valeur "association" en Meta qui n'existe pas en Simple -->
			<xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute> 
			<xsl:element name="model:Parent">
				<xsl:attribute name="name"><xsl:value-of select="@clientClassName"/></xsl:attribute>
				<xsl:attribute name="role"><xsl:value-of select="@clientRole"/></xsl:attribute>
				<xsl:attribute name="multiplicity">
          <xsl:choose>
            <xsl:when test="@type = 'composition'">0..1</xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="@clientMultiplicity"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:attribute>
			</xsl:element>
			<xsl:element name="model:Child">
				<xsl:attribute name="name"><xsl:value-of select="@supplierClassName"/></xsl:attribute>
				<xsl:attribute name="role"><xsl:value-of select="@supplierRole"/></xsl:attribute>
				<xsl:attribute name="multiplicity"><xsl:value-of select="@supplierMultiplicity"/></xsl:attribute>
			</xsl:element>
			<xsl:if test="@associationClassifier!=''">
				<xsl:element name="model:LinkClass">
					<xsl:attribute name="name"><xsl:value-of select="@associationClassifier"/></xsl:attribute>
				</xsl:element>
			</xsl:if>
			
			<xsl:apply-templates/>

		</xsl:element>
	</xsl:template>
	

	
	<xsl:template match="Class | Enumeration" mode="Enumeration">
		<xsl:element name="model:Enumeration">
			<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
			<!--<xsl:value-of select="@name"/>
			<xsl:copy-of select="@name"/>-->
			<xsl:apply-templates select="Property" mode="Enumeration"/>
		</xsl:element>
	</xsl:template>
	
	
	<xsl:template match="Property" mode="Enumeration">
		<xsl:element name="model:Literal">
				<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
		</xsl:element>
	</xsl:template>
	
	
	<xsl:template match="Class">
		<xsl:choose>
			<xsl:when test="@stereotype='' or not(@stereotype)">
				<xsl:element name="model:Class">
					<xsl:copy-of select="@name"/>
					<xsl:variable name="className" select="@name"/>
					
					<xsl:if test="//Generalization[@clientClassName=$className]">
						<xsl:attribute name="inherit"><xsl:value-of select="//Generalization[@clientClassName=$className]/@supplierClassName"/></xsl:attribute>
					</xsl:if>

					<xsl:if test="//Implementation[@clientClassName=$className]">
						<xsl:attribute name="implement">
							<xsl:for-each select="//Implementation[@clientClassName=$className]">
								<xsl:value-of select="@supplierClassName"/>
								<xsl:if test="position()!=last()"><xsl:text> </xsl:text></xsl:if>
							</xsl:for-each>
						</xsl:attribute>
					</xsl:if>
						
					<xsl:apply-templates/>
				</xsl:element>
			</xsl:when>
			<xsl:otherwise>
				<xsl:if test="@stereotype='enumeration'">
					<xsl:apply-templates select="." mode="Enumeration"/>
				</xsl:if>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	
	<xsl:template match="Interface">
		<xsl:element name="model:Interface">
			<xsl:copy-of select="@name"/>
			<xsl:apply-templates/>
		</xsl:element>
	</xsl:template>
	
	<xsl:template match="Property">
		<xsl:element name="model:Property">
			<xsl:copy-of select="@name"/>
			<xsl:copy-of select="@type"/>
			<xsl:apply-templates/>
		</xsl:element>
</xsl:template>
	
</xsl:stylesheet>
